#include <iostream>
#include <future>
#include <thread>
#include <memory>

int Add(int num1, int num2)
{
    std::cout << "into add\n";
    return num1 + num2;
}

int main()
{
    // 异步执行
    //std::packaged_task 有点像function对函数的封装
    // 也可以通过传递智能指针来解决问题 不能拷贝构造的问题
    auto fn = std::make_shared<std::packaged_task<int(int, int)>>(Add);
    // std::packaged_task<int(int, int)> fn(Add);   // packaged_task 创建的对象不允许去进行拷贝构造 因为它需要关联future 所以应该是一个

    std::future<int> res = fn->get_future();   // 这里设置关联关系 关联fn函数的结果给res

    std::thread t1([fn](){
        (*fn)(11, 22);
    });

    // std::thread t1(move(fn), 33, 22);
    
    std::cout << res.get() << std::endl;

    t1.join();

    return 0;
}